﻿using SWBetongXaydung.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SWBetongXaydung.BLL
{
    class DonGiaNhienLieuBLL
    {
        public static List<DonGiaNhienLieu> GetList()
        {
            using (var db = DBContextHelper.GetContext())
            {
                return db.DonGiaNhienLieuDbSet.OrderByDescending(e => e.Nam).ThenByDescending(e => e.Thang).ToList();
            }
        }

        public static List<DonGiaNhienLieu> GetList(int IDLoaiNhienLieu)
        {
            using (var db = DBContextHelper.GetContext())
            {
                return db.DonGiaNhienLieuDbSet.Where(e => e.IDLoaiNhienLieu == IDLoaiNhienLieu).OrderBy(e => e.Nam).ThenBy(e => e.Thang).ToList();
            }
        }

        internal static List<DonGiaNhienLieu> GetDonGia(int thang, int nam)
        {
            using (var db = DBContextHelper.GetContext())
            {
                return db.DonGiaNhienLieuDbSet.Where(e => e.Thang == thang && e.Nam == nam).ToList();
            }
        }

        /// <summary>
        /// Lấy đơn giá nhiên liệu cho một loại xe
        /// </summary>
        /// <param name="thang"></param>
        /// <param name="nam"></param>
        /// <param name="soXe"></param>
        /// <returns></returns>
        internal static DonGiaNhienLieu GetDonGia(int thang, int nam, string soXe)
        {
            using (var db = DBContextHelper.GetContext())
            {
                var xe = (from e in db.XeDbSet
                          where e.SoXe == soXe
                          select e).SingleOrDefault();
                if (xe == null)
                    throw new Exception("Xe: " + soXe + " không tồn tại.");
                var loaiNhienLieu = (from e in db.LoaiNhienLieuDbSet
                                     where e.IDLoaiNhienLieu == xe.IDLoaiNhienLieu
                                     select e).SingleOrDefault();
                if (loaiNhienLieu == null)
                    throw new Exception("Loại nhiên liệu cho xe: " + soXe + " không tồn tại.");
                var donGiaNhienLieu = (from e in db.DonGiaNhienLieuDbSet
                                       where e.Thang == thang &&
                                       e.Nam == nam &&
                                       e.IDLoaiNhienLieu == xe.IDLoaiNhienLieu
                                       select e).SingleOrDefault();
                return donGiaNhienLieu;
            }
        }

        internal static CODE_RESULT_RETURN Add(DonGiaNhienLieu dg)
        {
            using (var db = DBContextHelper.GetContext())
            {
                var _dg = db.DonGiaNhienLieuDbSet.Where(e => e.Thang == dg.Thang && e.Nam == dg.Nam && e.IDLoaiNhienLieu == dg.IDLoaiNhienLieu).SingleOrDefault();
                if (_dg != null)
                    return CODE_RESULT_RETURN.TenTrung;
                else
                {
                    db.DonGiaNhienLieuDbSet.Add(dg);
                    db.SaveChanges();
                    return CODE_RESULT_RETURN.ThanhCong;
                }
            }
        }

        public static CODE_RESULT_RETURN Update(DonGiaNhienLieu dg)
        {
            using (var db = DBContextHelper.GetContext())
            {
                var _dg = db.DonGiaNhienLieuDbSet.Where(e => e.Thang == dg.Thang && e.Nam == dg.Nam && e.IDLoaiNhienLieu == dg.IDLoaiNhienLieu).SingleOrDefault();
                if (_dg != null)
                {
                    _dg.DonGia = dg.DonGia;
                    db.SaveChanges();
                    return CODE_RESULT_RETURN.ThanhCong;
                }
                else
                {
                    return CODE_RESULT_RETURN.ThatBai;
                }
            }
        }

        public static CODE_RESULT_RETURN Delete(int IDDonGiaNhienLieu)
        {
            using (var db = DBContextHelper.GetContext())
            {
                var _dg = db.DonGiaNhienLieuDbSet.Where(e => e.IDDonGia == IDDonGiaNhienLieu).SingleOrDefault();
                if (_dg != null)
                {
                    db.DonGiaNhienLieuDbSet.Remove(_dg);
                    db.SaveChanges();
                    return CODE_RESULT_RETURN.ThanhCong;

                }
                else
                    return CODE_RESULT_RETURN.ThatBai;
            }
        }
    }
}
